package com.quan.mall.service;

import com.quan.commons.core.bean.R;
import com.quan.mall.commons.vo.OmsOrderVo;
import com.quan.mall.commons.vo.OrderConfirmVo;
import com.quan.mall.entity.OmsOrder;
import com.quan.commons.core.utils.PageUtils;
import com.quan.commons.core.biz.support.MyBaseService;

import java.util.List;

/**
 * 订单
 *
 * @author yhaoquan
 * @email yhaoquan@163.com
 * @date 2021-03-09 17:22:37
 */
public interface OmsOrderService extends MyBaseService<OmsOrder> {

    /**
     * 列表查询
     * @param vo
     * @return
     */
    public List<OmsOrderVo> queryList(PageUtils pageUtils, OmsOrderVo vo) ;

    /**
     * 分页查询
     * @param pageUtils
     * @param vo
     * @return
     */
    public PageUtils queryPage(PageUtils pageUtils, OmsOrderVo vo);

    /**
     * 查询订单详情
     * @param id
     * @return
     */
    OmsOrderVo getOrderInfo(Long id);

    /**
     * 根据订单号获取订单信息
     * @param orderSn
     * @return
     */
    OmsOrder getOrderByOrderSn(String orderSn);

    /**
     * 提交订单
     * @param vo
     * @return
     */
    public R submitOrder(OmsOrderVo vo);

    /**
     * 取消订单
     * @param vo
     * @return
     */
    public void cancelOrder(OmsOrderVo vo);

    /**
     * 商家确认收货
     * @param vo
     * @return
     */
    public OmsOrderVo confirmReceivePack(OmsOrderVo vo);

    /**
     * 会员确认收货
     * @param vo
     * @return
     */
    public void memberConfirmReceivePack(OmsOrderVo vo);

    /**
     * 订单发货
     * @param vo
     * @return
     */
    public void expressDelivery(OmsOrderVo vo);

    /**
     * 订单备注
     * @param vo
     * @return
     */
    public void orderRemarks(OmsOrderVo vo);

    /**
     * 订单状态变更
     * @param orderId
     * @param status
     */
    public void changeOrderStatus(Long orderId, Integer status);

    /**
     * 是否申请退款
     * @param orderId
     * @param isRefund
     */
    public void changeIsRefund(Long orderId, Integer isRefund);

    /**
     * 关单，将超过时间没有付款的订单删除
     *
     * @param orderId
     * @return true 已关单
     */
    public boolean closeOrderMQ(Long orderId);

    /**
     * 订单备注
     * @param vo
     */
    void remarks(OmsOrderVo vo);

    /**
     * 订单确认页返回需要用的数据
     * @param vo
     * @return
     */
    OrderConfirmVo confirmOrder(OrderConfirmVo vo);

    /**
     * 获取下单用户的购买成功次数
     * @param memberId
     * @return
     */
    int getMemberBuyCount(Long memberId);
}

